<?php
// +----------------------------------------------------------------------
// | CoreThink [ Simple Efficient Excellent ]
// +----------------------------------------------------------------------
// | Copyright (c) 2014 http://www.corethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: jry <598821125@qq.com> <http://www.corethink.cn>
// +----------------------------------------------------------------------

/**
 * 系统非常规MD5加密方法
 * @param  string $str 要加密的字符串
 * @return string
 * @author jry <598821125@qq.com>
 */
function user_md5($str, $key = 'CoreThink'){
    return '' === $str ? '' : md5(sha1($str) . $key);
}

/**
 * 检测用户是否登录
 * @return integer 0-未登录，大于0-当前登录用户ID
 * @author jry <598821125@qq.com>
 */
function is_login(){
    $user = session('user_auth');
    if (empty($user)) {
        return 0;
    } else {
        return session('user_auth_sign') == data_auth_sign($user) ? $user['uid'] : 0;
    }
}

/**
 * 数据签名认证
 * @param  array  $data 被认证的数据
 * @return string       签名
 * @author jry <598821125@qq.com>
 */
function data_auth_sign($data) {
    //数据类型检测
    if(!is_array($data)){
        $data = (array)$data;
    }
    ksort($data); //排序
    $code = http_build_query($data); //url编码并生成query字符串
    $sign = sha1($code); //生成签名
    return $sign;
}

/**
 * 根据用户ID获取用户信息
 * @param  integer $uid 用户ID
 * @param  string $field
 * @return array       用户信息
 */
function get_user_info($uid = 0, $field){
    static $list;

    /* 获取缓存数据 */
    if(empty($list)){
        $list = S('sys_user_info_list');
    }

    /* 查找用户信息 */
    $key = "u{$uid}";
    if(isset($list[$key])){ //已缓存，直接使用
        $user_info = $list[$key];
    } else { //调用接口获取用户信息
        $user_info = D('Admin/User')->getUserById($uid);
        if($info !== false){
            $user_info = $list[$key] = $user_info;
            /* 缓存用户 */
            $count = count($list);
            $max   = 1000;
            while ($count-- > $max) {
                array_shift($list);
            }
            S('sys_user_info_list', $list);
        } else {
            $user_info = array();
        }
    }
    if($field){
        return $user_info[$field];
    }
    return $user_info;
}


/**
 * 分析枚举类型配置值 格式 a:名称1,b:名称2
 * @author jry <598821125@qq.com>
 */
function parse_config_attr($string) {
    $array = preg_split('/[,;\r\n]+/', trim($string, ",;\r\n"));
    if(strpos($string,':')){
        $value  =  array();
        foreach ($array as $val) {
            list($k, $v) = explode(':', $val);
            $value[$k]   = $v;
        }
    }else{
        $value  =   $array;
    }
    return $value;
}

/**
 * select返回的数组进行整数映射转换
 * @param array $map  映射关系二维数组  array('字段名1'=>array(映射关系数组), '字段名2'=>array(映射关系数组), ...)
 * @return array  array(array('id'=>1,'title'=>'标题','status'=>'1','status_text'=>'图标', ...))
 * @author jry <598821125@qq.com>
 */
function int_to_string(&$data, $map = array('status' => array(1 => '正常', -1 => '删除', 0 => '禁用'))) {
    if($data === false || $data === null ){
        return $data;
    }
    $data = (array)$data;
    foreach ($data as $key => $row){
        foreach ($map as $col=>$pair){
            if(isset($row[$col]) && isset($pair[$row[$col]])){
                $data[$key][$col.'_text'] = $pair[$row[$col]];
            }
        }
    }
    return $data;
}

/**
 * select返回的数组进行整数映射转换
 * @param array $map  映射关系二维数组  array('字段名1'=>array(映射关系数组), '字段名2'=>array(映射关系数组), ...)
 * @return array  array(array('id'=>1,'title'=>'标题','status'=>'1','status_text'=>'正常', ...))
 * @author jry <598821125@qq.com>
 */
function int_to_icon(&$data, $map = array('status' => array(
                        1  => '<i class="icon-ok" style="color:green"></i>',
                        -1 => '<i class="icon-trash" style="color:red"></i>',
                        0  => '<i class="icon-ban-circle" style="color:red"></i>'))) {
    if($data === false || $data === null ){
        return $data;
    }
    $data = (array)$data;
    foreach ($data as $key => $row){
        foreach ($map as $col=>$pair){
            if(isset($row[$col]) && isset($pair[$row[$col]])){
                $data[$key][$col.'_text'] = $pair[$row[$col]];
            }
        }
    }
    return $data;
}


/**
* 对查询结果集进行排序
* @access public
* @param array $list 查询结果
* @param string $field 排序的字段名
* @param array $sortby 排序类型
* asc正向排序 desc逆向排序 nat自然排序
* @return array
* @author jry <598821125@qq.com>
*/
function list_sort_by($list,$field, $sortby='asc') {
   if(is_array($list)){
       $refer = $resultSet = array();
       foreach ($list as $i => $data)
           $refer[$i] = &$data[$field];
       switch ($sortby) {
           case 'asc': // 正向排序
                asort($refer);
                break;
           case 'desc':// 逆向排序
                arsort($refer);
                break;
           case 'nat': // 自然排序
                natcasesort($refer);
                break;
       }
       foreach ( $refer as $key=> $val)
           $resultSet[] = &$list[$key];
       return $resultSet;
   }
   return false;
}


/**
 * 系统邮件发送函数
 * @param string $receiver 收件人
 * @param string $subject 邮件主题
 * @param string $body 邮件内容
 * @param string $attachment 附件列表
 * @return boolean
 * @author jry <598821125@qq.com>
 */
function think_send_mail($receiver, $subject = '', $body = '', $attachment = null){
    if( 1 == C('MAIL_TYPE')){
        $mailHeader = "MIME-Version: 1.0" . "\r\n";
        $mailHeader .= "Content-type:text/html;charset=utf-8" . "\r\n";
        $mailHeader .= 'From: '. C('WEB_SITE_TITLE') .'<'. C('MAIL_SMTP_USER') .'>' . "\r\n";
        return mail($receiver, $subject, $body.C('MIAL_SMTP_SIGNATURE'),$mailHeader) ? true : "邮件发送错误";
    }else{
        $mail = new \Org\Net\Email();
        $mail->setServer(C('MAIL_SMTP_HOST'), C('MAIL_SMTP_USER'), C('MAIL_SMTP_PASS'), C('MAIL_SMTP_PORT'), C('MAIL_SMTP_SECURE')); //设置smtp服务器
        $mail->setFrom(C('MAIL_SMTP_USER')); //设置发件人
        $mail->setReceiver($receiver); //设置收件人，多个收件人，调用多次
        $mail->setMail($subject.'｜'.C('WEB_SITE_TITLE'), $body.C('MIAL_SMTP_SIGNATURE')); //设置邮件主题、内容
        return $mail->sendMail() ? true : "邮件发送错误"; //发送
    }
}

/**
 * 敏感词过滤
 * @param  string $text 待检测内容
 * @param  array $sensitive 待过滤替换内容
 * @param  string $suffix 替换后内容
 * @return bool
 * @author jry <598821125@qq.com>
 */
function sensitive_filter($text){
    $string = new \Org\Util\String();
    $sensitive = C('SENSITIVE_WORDS');
    return $string->sensitive_filter($text, $sensitive, $suffix = '**');
}


/**
 * 获取上传文件路径
 * @param  int $id 文件ID
 * @return string
 * @author jry <598821125@qq.com>
 */
function get_cover($id){
    return D('Admin/Upload')->getPathOrUrlById($id); 
}


/**
 * 检测分类是否绑定了指定模型
 * @param  int $cid 分类ID
 * @return boolean  true-绑定了模型，false-未绑定模型
 */
function check_category_model($cid){
    $category = D('Category')->getCategoryById($cid);
    $current_model = D('Model')->getModelByName(CONTROLLER_NAME);
    return $category['model'] == $current_model['id'];
}

/**
 * 时间戳格式化
 * @param int $time
 * @return string 完整的时间显示
 * @author huajie <banhuajie@163.com>
 */
function time_format($time = NULL,$format='Y-m-d H:i'){
    $time = $time === NULL ? NOW_TIME : intval($time);
    return date($format, $time);
}

